One large class of integrated circuits are the programmable integrated circuits. Programmable integrated circuits feature the advantage of flexibility, i.e., a programmable integrated circuit may be used to implement any number of different complex digital logic circuits by varying the specific programming of the integrated circuit. A digital logic circuit is an electrical circuit that produces a digital output as a logic function of digital inputs. By digital output and digital input, it is meant that an output or input is either one ("high") or zero ("low"). Examples of logic functions are AND, OR, NAND, and XOR. Typically, a digital logic circuit is formed from a cascade of separate logic functions. The terms signal propagation, input signals, and output signals as used herein all refer to the propagation of signals that are digital in nature.
Another important advantage of programmable integrated circuits is the generally lower cost of manufacture. By mass producing a large number of programmable integrated circuits from a single integrated circuit mask design, the design costs of a programmable integrated circuit may be distributed over a large number of circuits. The present invention is directed towards a programmable integrated circuit. In particular, the present invention is a field programmable gate array (FPGA), one type of programmable integrated circuit. Unlike other programmable integrated circuits which are programmed shortly after manufacture at the production site (such as mask programmable gate arrays (MPGAs)), FPGAs are programmed in the field by the user.
The programming of the circuits may be accomplished using antifuse programming technology or memory, programming technology. For example, as is well known in the art, anti-fuse programming involves the physical modification of the programmable integrated circuit so as to connect or disconnect logical elements within the integrated circuit. Memory programming involves setting a plurality of memory bits in the integrated circuit. The memory bits in turn control the connection of logical elements in the integrated circuit. In general, antifuse programmed devices can operate at faster speeds than memory programmed devices. Moreover, anti-fuse programmed devices need only be programmed once and the device will operate indefinitely. In contrast, the advantage of memory programming is that the integrated circuit may be reprogrammed an indefinite number of times. Moreover, because of programming by use of memory bits, each time the integrated circuit is deactivated, in order to operate correctly when reactivated, the integrated circuit must be reprogrammed.
Whether antifuse programmed or memory programmed, an FPGA typically consists of an array of modularized logic blocks and interconnection resources. Each logic block can be programmed to implement a particular logic function. Typically, the logic blocks are arranged in a two-dimensional array, consisting of a plurality of columns of logic blocks. Interconnect resources occupy the space between the columns and rows of the logic blocks. The desired path of signal propagation is accomplished by means of the interconnect resources. The term topology is used to describe the particular arrangement of logic blocks and the interconnect resources. By programming a plurality of logic blocks to implement logic functions and utilizing the interconnect resources to connect them in the proper manner, a desired digital logic circuit can be implemented.
Although FPGAs can be used for many different digital applications, one increasingly important application of FPGAs is for the interfacing of different synchronous electronic digital components. With different synchronous electronic components operating at different clock speeds, in order to interface between separately clocked components, the FPGA must be able to effectively accommodate signals that originate at varying rates. In such a case, the FPGA must be able to operate asynchronously. Also, special circuit components, known as synchronizers, are necessary to regulate communication between the two systems. Interfacing a synchronous circuit to the environment requires similar features from an FPGA.
Another increasingly important use for FPGAs capable of asynchronous operation is for prototyping purposes. Asynchronous FPGAs are particularly useful as a platform for designing and testing asynchronous circuit designs. By providing a programmable platform for design of asynchronous circuits, an inexpensive method of design and testing of asynchronous circuits is provided.